package pl.edu.pk.psb.bc.bo;

import java.util.List;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import pl.edu.pk.psb.bc.assembler.KategoriaAssembler;
import pl.edu.pk.psb.bc.assembler.WydarzenieAssembler;
import pl.edu.pk.psb.bc.dao.KategoriaDao;
import pl.edu.pk.psb.bc.dao.WydarzenieDao;
import pl.edu.pk.psb.bc.dto.KategoriaDto;
import pl.edu.pk.psb.bc.dto.RezerwacjaDto;
import pl.edu.pk.psb.bc.dto.WydarzenieDto;
import pl.edu.pk.psb.bc.util.ParametryWyszukiwaniaWydarzen;

@Component
public class WydarzenieBoImpl implements WydarzenieBo {
	@Autowired
	WydarzenieAssembler wydarzenieAssembler;

	@Autowired
	KategoriaAssembler kategoriaAssembler;
	
	@Autowired
	WydarzenieDao wydarzenieDao;
	
	@Autowired
	KategoriaDao kategoriaDao;

	@Override
	@Transactional
	public void zapiszWydarzenie(WydarzenieDto wydarzenieDto) {
		wydarzenieDao.zapisz(wydarzenieAssembler.konwertuj(wydarzenieDto));
	}

	@Override
	@Transactional
	public WydarzenieDto pobierzWydarzenie(Integer id) {
		return wydarzenieAssembler.konwertuj(wydarzenieDao.pobierz(id));
	}

	@Override
	@Transactional
	public List<WydarzenieDto> pobierzWydarzenia() {
		return wydarzenieAssembler.konwertujDoDto(wydarzenieDao.pobierzWszystkie());
	}
	
	@Override
	@Transactional
	public List<KategoriaDto> pobierzGlowneKategorie(){
		return kategoriaAssembler.konwertujDoDto(kategoriaDao.pobierzGlowneKategorie());
	}

	@Override
	@Transactional
	public KategoriaDto pobierzKategorie(int id) {
		return kategoriaAssembler.konwertuj(kategoriaDao.pobierz(id));
	}

	@Override
	@Transactional
	public List<WydarzenieDto> wyszukajWydarzenia(ParametryWyszukiwaniaWydarzen parametry) {
		return wydarzenieAssembler.konwertujDoDto(wydarzenieDao.wyszukajWydarzenia(parametry));
	}

	@Override
	@Transactional
	public Set<RezerwacjaDto> uzupelnijRezerwacjeOWydarzenie(Set<RezerwacjaDto> rezerwacje) {
		for(RezerwacjaDto rezerwacja : rezerwacje){
			WydarzenieDto wydarzenie = wydarzenieAssembler.konwertuj(wydarzenieDao.pobierz(rezerwacja.getIdWydarzenia()));
			rezerwacja.setWydarzenie(wydarzenie);
		}
		return rezerwacje;
	}

}
